package tools

import (
	"fmt"
	"time"
)

// isInTimeRange 检查当前时间是否在开始和结束时间之间，支持跨越午夜的时间范围
func IsInTimeRange(startStr, endStr string) (bool, error) {
	// 获取当前时间的时分秒
	now := time.Now()
	currentHMS := time.Date(0, 1, 1, now.Hour(), now.Minute(), now.Second(), 0, now.Location())

	// 将字符串时间转换为time.Time类型，只保留时分秒部分
	startTime, err := time.Parse("15:04:05", startStr)
	if err != nil {
		return false, err
	}
	startTime = time.Date(0, 1, 1, startTime.Hour(), startTime.Minute(), startTime.Second(), 0, now.Location())

	endTime, err := time.Parse("15:04:05", endStr)
	if err != nil {
		return false, err
	}
	endTime = time.Date(0, 1, 1, endTime.Hour(), endTime.Minute(), endTime.Second(), 0, now.Location())

	// 如果结束时间小于开始时间，说明时间范围跨越了午夜
	if endTime.Before(startTime) {
		// 如果当前时间小于开始时间，表示当前时间已经过了午夜，需要加上24小时进行比较
		if currentHMS.Before(startTime) {
			currentHMS = currentHMS.Add(24 * time.Hour)
		}
		// 将结束时间加上24小时，因为它是第二天的时间
		endTime = endTime.Add(24 * time.Hour)
	}

	// 判断当前时间是否在范围内
	return currentHMS.After(startTime) && currentHMS.Before(endTime), nil
}

//按照上海来定位当前的时区
func GetCurrentTiemByshanghai() time.Time {
	// 获取当前UTC时间
	nowUTC := time.Now().UTC()

	// 定义中国时区，即UTC+8
	location, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		panic(err)
	}
	// 将UTC时间转换为中国时区时间
	nowCST := nowUTC.In(location)
	return nowCST
}

//按照上海来定位当前的时区
func GetCurrentTiemByshanghai1(t time.Time) time.Time {

	// 定义中国时区，即UTC+8
	location, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		panic(err)
	}
	// 将UTC时间转换为中国时区时间
	nowCST := t.UTC().In(location)
	return nowCST
}

//比较二个“HH：MM：SS”格式就时间A>=B
func CompareAGteB(timeA, timeB string) bool {
	const timeLayout = "15:04:05"

	parsedTimeA, err := time.Parse(timeLayout, timeA)
	if err != nil {
		fmt.Println("Failed to parse timeA:", err)
		return false
	}

	parsedTimeB, err := time.Parse(timeLayout, timeB)
	if err != nil {
		fmt.Println("Failed to parse timeB:", err)
		return false
	}

	if parsedTimeA.Before(parsedTimeB) {
		fmt.Println(timeA, "is before", timeB)
		return false
	} else if parsedTimeA.After(parsedTimeB) {
		fmt.Println(timeA, "is after or equal", timeB)
		return true
	}
	return false
}

func JoinTimeInBeijing(tStr string) (time.Time, error) {
	// 加载北京时间时区
	location, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		return time.Time{}, err
	}

	// 获取当前时间并转换为北京时间
	now := time.Now().In(location)

	// 将当前北京时间的年月日格式化为 "yyyy-MM-dd"
	currentDate := now.Format("2006-01-02")

	// 拼接当前日期和提供的时间字符串
	dateTimeStr := currentDate + " " + tStr

	// 解析拼接后的字符串
	t, err := time.ParseInLocation("2006-01-02 15:04:05", dateTimeStr, location)
	if err != nil {
		return time.Time{}, err
	}

	return t, nil
}
